#ifndef GROUPADAPTERINTERFACE_H_JM_20121116
#define GROUPADAPTERINTERFACE_H_JM_20121116
/// @file GroupAdapterInterface.h _OK_ Definicia adapteru rozhrania pre nastavovanie
/// v/v group. 
namespace jm4bbx {
	/// Interface pre adapter nastavovania v/v vlastnosti group. Pre rozne 
	/// verzie boboxu sa lisi sposob pristupu k v/v. Kvoli zachovaniu 
	/// kompatibility je vhodne pre rozhranie boboxu implementovat adapter, 
	/// ktory prisposobi chovanie. Tymto sposobom budu vsetky boxy funkcne 
	/// aj pri zmene verzie boboxu.
	class GroupAdapterInterface {
	public:
		/// Pociatok citania dat.
		/// Povolene rozmedzie citanie dat je urcene s {@link getReadBegin()} a 
		/// {@link getReadEnd()}.
		virtual size_t getReadBegin() const = 0;

		/// Pociatok citania dat.
		/// Povolene rozmedzie citanie dat je urcene s {@link getReadBegin()} a 
		/// {@link getReadEnd()}.
		virtual size_t getReadEnd() const = 0;

		/// Aktualna pozicia citania dat.
		virtual size_t getReadPosition() const = 0;

		/// Posun aktualnej pozicie citania dat.
		/// @param val urcuje velkost vykonaneho posunu
		virtual void moveReadPosition(int val = 1) = 0;

		/// Zmena rozsahu dat pre citanie s posunutim indexovania na pociatok.
		/// Typicky pred poslanim dat na vystup sa vystupnej skupine nastavi 
		/// novy rozsah, v ktorom adresat dat bude vykonavat svoju cinnost.
		/// Napr. pre rozsah (0,100) sa po zavolani relocate(10,20) upravi 
		/// rozsah na (0, 10) pricom pristup k datam na pozicii 0 bude defakto
		/// pristup k datam na pozicii 10. To znamena ze okrem zmeny rozsahu sa 
		/// posunie aj cele indexovanie tak aby adreasat nic nepoznal.
		/// 
		/// @warning Relokovat je mozne len v rozsahu alokovanej pamate.
		/// @see allocate(size_t)
		virtual void relocate(size_t from, size_t to) = 0;

		/// Alokacia pamate pre data.
		/// @param size pocet alokovanych dat
		virtual void allocate(size_t size) = 0;

		/// Zmena velkosti spracovavaneho rozsahu.
		/// Obdobna funkcionalita ako relokacia {@link relocate(size_t, size_t)} 
		/// pri zadani relocate(0, size).
		/// @warning Resizovat je mozne len v rozsahu alokovanej pamate.
		/// @see allocate(size_t)
		virtual void resize(size_t size) = 0;

		/// Je sprava prijata touto skupinou ukoncovacujuca komunikaciu?
		virtual bool isPoisoned() const = 0;

		/// Pocet datovych stlpcov vo v/v skupine.
		virtual  size_t getColumnCount() const = 0;

	};	
} // namespace jm4bbx

#endif
